package br.com.medvagas.comum.entidade;

import java.io.Serializable;
import javax.persistence.*;

import java.util.Date;
import java.util.Set;


/**
 * The persistent class for the empresa database table.
 * 
 */
@Entity
@Table(name="empresa")
@NamedQueries({
	@NamedQuery(
		name="Empresa.consultarPorCnes", 
		query="select e.idEmpresa from Empresa e where e.cnes = :cnes"),
	@NamedQuery(
		name="Empresa.consultarPorCnpj", 
		query="select e.idEmpresa from Empresa e where e.cnpj = :cnpj"),
			
	@NamedQuery(
		name="Empresa.consultarPorCnesSemId", 
		query="select e from Empresa e where e.cnes = :cnes and e.idEmpresa <> :idEmpresa"),
	@NamedQuery(
		name="Empresa.consultarPorCnpjSemId", 
		query="select e from Empresa e where e.cnpj = :cnpj and e.idEmpresa <> :idEmpresa"),

	@NamedQuery(
		name="Empresa.consultarEmpresas", 
		query="select e from Empresa e where e.usuarioEmpresa.idUsuarioEmpresa = :idUsuarioEmpresa"),
	
	@NamedQuery(
		name="Empresa.consultarPorUsuario", 
		query="select new br.com.medvagas.comum.util.ChaveValor(e.idEmpresa, e.nomeFantasia) from Empresa e where e.usuarioEmpresa.idUsuarioEmpresa = :idUsuarioEmpresa")
})  
public class Empresa implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="id_empresa")
	private Integer idEmpresa;

	private String cep;

	private String cnes;

	private String cnpj;

	private String complemento;

    @Temporal(TemporalType.TIMESTAMP)
	@Column(name="data_cadastro")
	private Date dataCadastro;
    
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name="data_ultima_alteracao")
    private Date dataUltimaAlteracao;

	private String endereco;

	private String nacionalidade;

	@Column(name="nome_fantasia")
	private String nomeFantasia;

	private String numero;

	@Column(name="numero_funcionarios")
	private Integer numeroFuncionarios;

	private String ramal;

	@Column(name="ramo_atuacao_outro")
	private String ramoAtuacaoOutro;

	@Column(name="razao_social")
	private String razaoSocial;

	private String site;

	private String telefone;

	@Column(name="tipo_empresa")
	private String tipoEmpresa;

	@Column(name="tipo_empresa_privada")
	private String tipoEmpresaPrivada;

	@Column(name="tipo_empresa_publica")
	private String tipoEmpresaPublica;

	@Column(name="sub_tipo_empresa_publica")
	private String subTipoEmpresaPublica;

	@Column(name="tipo_estabelecimento")
	private String tipoEstabelecimento;

	//bi-directional many-to-one association to Uf
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="sigla_uf", insertable=false, updatable=false)
	private Uf uf;
	@Column(name="sigla_uf")
	private String siglaUf;

	//bi-directional many-to-one association to Municipio
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="cod_ibge", insertable=false, updatable=false)
	private Municipio municipio;
	@Column(name="cod_ibge")
	private String codIbge;

	//bi-directional many-to-one association to RamoAtuacao
    @ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="id_ramo_atuacao", insertable=false, updatable=false)
	private RamoAtuacao ramoAtuacao;
    @Column(name="id_ramo_atuacao")
    private Integer idRamoAtuacao;

	//bi-directional many-to-one association to Classificacao
    @ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="id_classificacao", insertable=false, updatable=false)
	private Classificacao classificacao;
    @Column(name="id_classificacao")
    private Integer idClassificacao;

	//bi-directional many-to-one association to ServicoDisponivel
	@OneToMany(mappedBy="empresa", fetch=FetchType.LAZY)
	private Set<ServicoDisponivel> stServicoDisponivel;

	//bi-directional many-to-one association to UsuarioEmpresa
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="id_usuario_empresa")
	private UsuarioEmpresa usuarioEmpresa;
	
	//bi-directional many-to-one association to Vaga
	@OneToMany(mappedBy="empresa", fetch=FetchType.LAZY)
	private Set<Vaga> stVaga;

    public Empresa() {
    }

	public Empresa(Integer idEmpresa, String nomeFantasia) {
		super();
		this.idEmpresa = idEmpresa;
		this.nomeFantasia = nomeFantasia;
	}

	public Integer getIdEmpresa() {
		return this.idEmpresa;
	}

	public void setIdEmpresa(Integer idEmpresa) {
		this.idEmpresa = idEmpresa;
	}

	public String getCep() {
		return this.cep;
	}

	public void setCep(String cep) {
		this.cep = cep;
	}

	public String getCnes() {
		return this.cnes;
	}

	public void setCnes(String cnes) {
		this.cnes = cnes;
	}

	public String getCnpj() {
		return this.cnpj;
	}

	public void setCnpj(String cnpj) {
		this.cnpj = cnpj;
	}

	public String getComplemento() {
		return this.complemento;
	}

	public void setComplemento(String complemento) {
		this.complemento = complemento;
	}

	public Date getDataUltimaAlteracao() {
		return this.dataUltimaAlteracao;
	}

	public void setDataUltimaAlteracao(Date dataUltimaAlteracao) {
		this.dataUltimaAlteracao = dataUltimaAlteracao;
	}

	public String getEndereco() {
		return this.endereco;
	}

	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}

	public String getNacionalidade() {
		return this.nacionalidade;
	}

	public void setNacionalidade(String nacionalidade) {
		this.nacionalidade = nacionalidade;
	}

	public String getNomeFantasia() {
		return this.nomeFantasia;
	}

	public void setNomeFantasia(String nomeFantasia) {
		this.nomeFantasia = nomeFantasia;
	}

	public String getNumero() {
		return this.numero;
	}

	public void setNumero(String numero) {
		this.numero = numero;
	}

	public Integer getNumeroFuncionarios() {
		return this.numeroFuncionarios;
	}

	public void setNumeroFuncionarios(Integer numeroFuncionarios) {
		this.numeroFuncionarios = numeroFuncionarios;
	}

	public String getRamal() {
		return this.ramal;
	}

	public void setRamal(String ramal) {
		this.ramal = ramal;
	}

	public String getRamoAtuacaoOutro() {
		return this.ramoAtuacaoOutro;
	}

	public void setRamoAtuacaoOutro(String ramoAtuacaoOutros) {
		this.ramoAtuacaoOutro = ramoAtuacaoOutros;
	}

	public String getRazaoSocial() {
		return this.razaoSocial;
	}

	public void setRazaoSocial(String razaoSocial) {
		this.razaoSocial = razaoSocial;
	}

	public String getSite() {
		return this.site;
	}

	public void setSite(String site) {
		this.site = site;
	}

	public String getTelefone() {
		return this.telefone;
	}

	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}

	public String getTipoEmpresa() {
		return this.tipoEmpresa;
	}

	public void setTipoEmpresa(String tipoEmpresa) {
		this.tipoEmpresa = tipoEmpresa;
	}

	public String getTipoEmpresaPrivada() {
		return this.tipoEmpresaPrivada;
	}

	public void setTipoEmpresaPrivada(String tipoEmpresaPrivada) {
		this.tipoEmpresaPrivada = tipoEmpresaPrivada;
	}

	public String getTipoEmpresaPublica() {
		return this.tipoEmpresaPublica;
	}

	public void setTipoEmpresaPublica(String tipoEmpresaPublica) {
		this.tipoEmpresaPublica = tipoEmpresaPublica;
	}

	public String getSubTipoEmpresaPublica() {
		return this.subTipoEmpresaPublica;
	}

	public void setSubTipoEmpresaPublica(String tipoEmpresaPublica2) {
		this.subTipoEmpresaPublica = tipoEmpresaPublica2;
	}

	public String getTipoEstabelecimento() {
		return this.tipoEstabelecimento;
	}

	public void setTipoEstabelecimento(String tipoEstabelecimento) {
		this.tipoEstabelecimento = tipoEstabelecimento;
	}

	public Uf getUf() {
		return this.uf;
	}

	public void setUf(Uf uf) {
		this.uf = uf;
	}
	
	public Municipio getMunicipio() {
		return this.municipio;
	}

	public void setMunicipio(Municipio municipio) {
		this.municipio = municipio;
	}
	
	public RamoAtuacao getRamoAtuacao() {
		return this.ramoAtuacao;
	}

	public void setRamoAtuacao(RamoAtuacao ramoAtuacao) {
		this.ramoAtuacao = ramoAtuacao;
	}
	
	public Classificacao getClassificacao() {
		return this.classificacao;
	}

	public void setClassificacao(Classificacao classificacao) {
		this.classificacao = classificacao;
	}
	
	public Set<ServicoDisponivel> getStServicoDisponivel() {
		return this.stServicoDisponivel;
	}

	public void setStServicoDisponivel(Set<ServicoDisponivel> servicoDisponivels) {
		this.stServicoDisponivel = servicoDisponivels;
	}
	
	public UsuarioEmpresa getUsuarioEmpresa() {
		return usuarioEmpresa;
	}

	public void setUsuarioEmpresa(UsuarioEmpresa usuarioEmpresa) {
		this.usuarioEmpresa = usuarioEmpresa;
	}

	public Set<Vaga> getStVaga() {
		return this.stVaga;
	}

	public void setStVaga(Set<Vaga> vagas) {
		this.stVaga = vagas;
	}

	public Date getDataCadastro() {
		return dataCadastro;
	}

	public void setDataCadastro(Date dataCadastro) {
		this.dataCadastro = dataCadastro;
	}

	public String getSiglaUf() {
		return siglaUf;
	}

	public void setSiglaUf(String siglaUf) {
		this.siglaUf = siglaUf;
	}

	public String getCodIbge() {
		return codIbge;
	}

	public void setCodIbge(String codIbge) {
		this.codIbge = codIbge;
	}

	public Integer getIdRamoAtuacao() {
		return idRamoAtuacao;
	}

	public void setIdRamoAtuacao(Integer idRamoAtuacao) {
		this.idRamoAtuacao = idRamoAtuacao;
	}

	public Integer getIdClassificacao() {
		return idClassificacao;
	}

	public void setIdClassificacao(Integer idClassificacao) {
		this.idClassificacao = idClassificacao;
	}
	
}